package com.itheima.schedule;
/*----------------------------------------------------------------------------------------------------------*/
import java.util.Scanner;
import java.util.TreeMap;

public class Test1 {
	public static void main(String[] args) {

		TreeMap map = null;



		//确定进程数
		Process PList1[]=new Process[2];
		for(int i=0;i<PList1.length;i++){
			if(i==0){
				System.out.println("请按顺序输入第"+(i+1)+"个进程的名字、服务时间、到达时间并用空格隔开：");
				PList1[i]=new Process("a",new JobControlBlock(2, 1));
				//按顺序设定开始时间、结束时间、周转时间、带权周转时间
				float time_Start=PList1[0].jbc.time_Arrive;//设置开始时间
				PList1[i].jbc.set_time_Start(time_Start);
				//设定下一个进程的开始时间
				time_Start+=PList1[i].jbc.time_Sever;
			}
			else {
				float time_Start=PList1[0].jbc.time_Finish;//设置开始时间
				System.out.println("请按顺序输入第"+(i+1)+"个进程的名字、服务时间、到达时间并用空格隔开：");
				PList1[i]=new Process("b",new JobControlBlock(1,1));
				PList1[i].jbc.set_time_Start(time_Start);
				//设定下一个进程的开始时间
				time_Start+=PList1[i].jbc.time_Sever;
			}
		}//创建进程
		System.out.println("--------FCFS算法--------顺序：");
		for(int i=0;i<PList1.length;i++){
		    System.out.println(
		        	"进程名："+PList1[i].Process_Name
			    +" 到达时间："+PList1[i].jbc.time_Arrive
		        +" 服务时间："+PList1[i].jbc.time_Sever
		        +" 开始时间："+PList1[i].jbc.time_Start
		        +" 结束时间："+PList1[i].jbc.time_Finish
		        +" 周转时间："+PList1[i].jbc.time_Turnover
		        +" 带权周转时间"+PList1[i].jbc.time_WeightedTurnover);
		}//按顺序输出（先到先服务）
		float time_Start2=PList1[0].jbc.time_Arrive;//SJF算法中到达时间最小的那个作业的到达时间就是开始时间
		Process leap=new Process();
		for(int i=1;i<PList1.length;i++){
			for(int j=i+1;j<PList1.length;j++){
				if(PList1[j].jbc.time_Sever<PList1[i].jbc.time_Sever){
					leap=PList1[i];
					PList1[i]=PList1[j];
					PList1[j]=leap;
				}
			}
		}//交换排序法使数组按服务时间的升序排列
		for(int i=0;i<PList1.length;i++){
			PList1[i].jbc.set_time_Start(time_Start2);
			time_Start2+=PList1[i].jbc.time_Sever;
		}//为SJF算法求值
		System.out.println("--------SJF算法--------");
		for(int i=0;i<PList1.length;i++){
		    System.out.println(
		        	"进程名："+PList1[i].Process_Name
			    +" 到达时间："+PList1[i].jbc.time_Arrive
		        +" 服务时间："+PList1[i].jbc.time_Sever
		        +" 开始时间："+PList1[i].jbc.time_Start
		        +" 结束时间："+PList1[i].jbc.time_Finish
		        +" 周转时间："+PList1[i].jbc.time_Turnover
		        +" 带权周转时间"+PList1[i].jbc.time_WeightedTurnover);
		}//按顺序输出（短则优先）
	}
}
